package com.babel.util.tools;

import java.util.Calendar;
import java.util.Date;

/**
 * 日期工具类
 * 
 * @author tianh
 * 
 */
public class CalendarUtil {

	/**
	 * 日期之前
	 * 
	 * @param date
	 * @param date2
	 * @return
	 */
	public static boolean isBefore(Date date, Date date2) {
		return null != date && null != date2 && date.before(date2);
	}

	/**
	 * 日期之后
	 * 
	 * @param date
	 * @param date2
	 * @return
	 */
	public static boolean isAfter(Date date, Date date2) {
		return null != date && null != date2 && date.after(date2);
	}

	/**
	 * 日期之中
	 * 
	 * @param date
	 * @param date2
	 * @param date3
	 * @return
	 */
	public static boolean isBetween(Date date, Date date2, Date date3) {
		return null != date && isAfter(date, date2) && isBefore(date, date3);
	}

    /**
     * 日期之中(前闭后开：data2<=data<data3)
     *
     * @param date
     * @param date2
     * @param date3
     * @return
     */
    public static boolean isBetweenEqualsBefore(Date date, Date date2, Date date3) {
        return null != date &&isBefore(date, date3)&&!isBefore(date,date2);
    }

	/**
	 * 某一个日期n月相对应某一天 n 为负值表示向前 n 为正值表示向后
	 */
	public static Date calDateForMonth(Date date, int n) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.add(Calendar.MONTH, n);
		return c.getTime();
	}

	/**
	 * 某一个日期n天相对应某一天 n 为负值表示向前 n 为正值表示向后
	 */
	public static Date calDateForDay(Date date, int n) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.add(Calendar.DAY_OF_MONTH, n);
		return c.getTime();
	}

	/**
	 * 某一个日期n天相对应某一天 n 为负值表示向前 n 为正值表示向后
	 */
	public static Date calDateForYear(Date date, int n) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.add(Calendar.YEAR, n);
		return c.getTime();
	}

	/**
	 * 取某一个时间相对某一时间n小时向前或向后的时间
	 */
	public static Date calDateForHour(Date date, int n) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.add(java.util.Calendar.HOUR_OF_DAY, n);
		return c.getTime();
	}

	/**
	 * 取某一时间相对某一时间n分钟向前或向后的时间
	 */
	public static Date calDateForMin(Date date, int n) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.add(java.util.Calendar.MINUTE, n);
		return c.getTime();
	}

	/**
	 * 当前月份最大天数
	 * 
	 * @param args
	 */
	public static int currentMonthMaxDay(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		int day = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
		return day;
	}
	
	
	public static void main(String[] args) {
	  Calendar cal = Calendar.getInstance();
	  //cal.setTime(new Date());
	  cal.set(2016, 6, 1);
	  System.out.println(cal.getTime());
	  System.out.println(CalendarUtil.calDateForDay(cal.getTime(), 45));
    }
}